package com.demo.config;

import com.demo.entity.HotelOrder;
import com.demo.entity.HotelOrder;
import com.demo.service.HotelOrderService;
import com.demo.service.HotelOrderService;
import dev.langchain4j.agent.tool.P;
import dev.langchain4j.agent.tool.Tool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * AI工具
 */
@Slf4j
@Component
public class HotelOrderTools {
    @Autowired
    HotelOrderService hotelOrderService;
    //酒店预约的增删改查
    /**
     * 进行预约，添加酒店预约
     */
    @Tool(name = "酒店预约，进行酒店预约功能",value = "如果用户需要进行出行预约，先要查询酒店预约是否存在，" +
            "如果存在则提示用户出行预约记录存在，并且告诉用户出行预约信息，提示用户想要删除还是修改，如果不存在者用户才可以添加。" +
            "需要添加酒店预约信息有:酒店预约id（自动递增，无需填写）、 用户id（自动根据{{userId}}填写）" +
            "用户身份证号码（18位）"+
            "用户名" +
            "酒店地点" +
            "酒店预定时间")
    public String add(HotelOrder hotelOrder) {
        log.info("进行酒店预约功能");
        HotelOrder hotelOrderExist = hotelOrderService.getByUserId(hotelOrder.getUserId());
        if( hotelOrderExist!= null) {
            return "您已经有出行预约记录了,记录如下："+hotelOrderExist;
        }
        if(hotelOrderService.save(hotelOrder)){
            log.info("酒店预约成功，预约信息为{}",hotelOrder);
            return "预约成功,您的预约记录为"+hotelOrder;
        }
        return "预约失败";

    }

    /**
     * 查询酒店预约记录
     * @param userId
     * @return
     */
    @Tool(name = "查询酒店预约记录",value = "根据用户的的账户id进行查询，账户id就是用户登录时的id，也就是{{userId}}，ai已经知道")
    public String query(@P(value = "用户的账户id{{userId}}",required = true) Long userId) {
        HotelOrder hotelOrder = hotelOrderService.getByUserId(userId);
        log.info("查询到预约记录，{}",hotelOrder);
        if(hotelOrder == null){
            return "没有预约记录，您可以先进行出行预约";
        }

        return "预约记录查询成功，预约记录如下："+ hotelOrder;

    }
    @Tool(name = "删除酒店预约记录",value = "先根据用户的的账户id{{userId}}进行查询，然后得到是否有记录，如果有记录就通过出行预约的id删除")
    public String delete(@P(value = "用户的账户id{{userId}}",required = true) Long userId) {
        log.info("用户的账户id {}",userId);
        HotelOrder hotelOrder = hotelOrderService.getByUserId(userId);
        log.info("查询到{}",hotelOrder);
        if(hotelOrder == null){
            return "没有预约记录";
        }
        log.info("正在删除。。。 {}",hotelOrder);
        boolean remove = hotelOrderService.removeById(hotelOrder.getHotelId());

        if(remove){
            log.info("删除完成 {}",hotelOrder);
            return "删除成功";
        }

        return "删除失败"+ hotelOrder;

    }
    @Tool(name = "修改酒店预约记录",value = "先根据用户的的账户id{{userId}}进行查询，然后得到是否有记录，如果有记录就通过可以进行修改了")
    public String update(@P(value = "用户的账户id{{userId}}",required = true) Long userId,
                         @P(value = "需要修改的身份证号码",required = true) String userIdCard,
                         @P(value = "用户名",required = true) String userName,
                         @P(value = "酒店地点",required = true)  String hotelPosition,
                         @P(value = "酒店预约时间",required = true) LocalDateTime hotelReserveTime
    ) {
        log.info("用户的账户id为： {}",userId);
        HotelOrder hotelOrder = hotelOrderService.getByUserId(userId);
        log.info("查询到{}",hotelOrder);
        if(hotelOrder == null){
            return "没有预约记录,无法修改";
        }
        hotelOrder.setUserIdCard(userIdCard);
        hotelOrder.setUserName(userName);
        hotelOrder.setHotelPosition(hotelPosition);
        hotelOrder.setHotelReserveTime(LocalDateTime.now());
        boolean update = hotelOrderService.updateById(hotelOrder);
        if(update){
            return "修改成功,修改后的信息为"+hotelOrder.toString();
        }
        return "修改失败";
    }
}
